<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Virtual Authenticator Tests</title>
</head>

<body>

  <h1>Virtual Authenticator Tests</h1>

  <script>


    async function registerCredential(options={}) {
      options=Object.assign({
        authenticatorSelection: {
          requireResidentKey: false,
        },
        rp: {
          id: "localhost",
          name: "Selenium WebDriver Test",
        },
        challenge: Int8Array.from("challenge"),
        pubKeyCredParams: [
          {type: "public-key",alg: -7},
        ],
        user: {
          name: "name",
          displayName: "displayName",
          id: Int8Array.from([1]),
        },
      },options);
      try {
        const credential=await navigator.credentials.create({publicKey: options});
        return {
          status: "OK",
          credential: {
            id: credential.id,
            rawId: Array.from(new Uint8Array(credential.rawId)),
            transports: credential.response.getTransports(),
          }
        };
      } catch(error) {
        return {status: error.toString()};
      }
    }

    async function getCredential(credentials,options={}) {
      options=Object.assign({
        challenge: Int8Array.from("Winter is Coming"),
        rpId: "localhost",
        allowCredentials: credentials,
        userVerification: "preferred",
      },options);
      try {
        const attestation=await navigator.credentials.get({publicKey: options});
        return {
          status: "OK",
          attestation: {
            userHandle: new Uint8Array(attestation.response.userHandle),
          },
        };
      } catch(error) {
        return {status: error.toString()};
      }
    }
  </script>
</body>

</html>
